"""
* 目的: 当数据库的表结构发生变化之后,如果直接删除原有的数据,再添加新的数据,有可能导致数据丢失
* 注意点:
  * 1.是为了备份表结构,而不是数据
  * 2.如果想要备份数据,需要使用工具,navicat,mysqlworkbench,等等
  * 3.更新的过程数据一般不会丢失,做降级的时候需要谨慎操作
* 操作流程:
  * 1.安装扩展
    * pip install flask_script
    * pip install flask_migrate
  * 2.导入三个类
    * from flask_script import Manager
    * from flask_migrate import Migrate, MigrateCommand
  * 3.通过Manager类创建对象manager,管理app
    * manager = Manager(app)
  * 4.使用Migrate,关联db,app
    * Migrate(app,db)
  * 5.给manager添加一条操作命令
    * manager.add_command("db",MigrateCommand)
  * 相关迁移命令:
    * 生成迁移文件夹[一次就好]
      * python xxx.py db init
    * 将模型类生成迁移脚本[重复执行]
      * python xxx.py db migrate -m '注释'
    * 将迁移脚本更新到数据库中[重复执行]
      * python xxx.py db upgrade/downgrade [version]
    * 其他命令
      * 查看最新版本的命令
        * python xxx.py db show
      * 查看当前版本
        * python xxx.py db current
      * 查看所有的历史版本
        * python xxx.py db history

"""""

from flask import Flask
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from flask_sqlalchemy import SQLAlchemy


app =Flask(__name__)

app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:000000@hadoop102:3306/data38"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db = SQLAlchemy(app)

# 3.通过Manager类创建对象manager,管理app
manager = Manager(app)
# 4.使用Migrate,关联db,app
Migrate(app,db)

manager.add_command("db",MigrateCommand)

# 5.编写模型类
class Student(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32))
    age = db.Column(db.Integer)


@app.route("/")
def hello():
    return "hello"

if __name__ == '__main__':
    # db.create_all()
    manager.run()
    """
    python app\demo38_data_migrate.py db init 仅执行一次
    python app\demo38_data_migrate.py db migrate -m 'initial'
    python app\demo38_data_migrate.py db upgrade 更新数据不丢失
    
    python app\demo38_data_migrate.py db upgrade 
    最新版本
    python app\demo38_data_migrate.py db show
    
    """